package com.csi.service;

import com.csi.domain.*;
import com.csi.pojo.PageBean;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;

public interface UserService {

    // 用户登陆
    User login(String loginAccount, String loginPassword);

    // 查找全部用户(角色，权限)
    List<User> findAll();

    // 查找用户分页
    PageBean<User> findPage(int currentPageNumber);

    // 根据id查找对应用户（角色）
    User findById(int userId);

    // 更新用户的状态
    void updateStatus(int status, int userId);

    // 修改用户密码
    User updatePassword(int userId, String password);

    // 修改用户信息
    void updateInfo(User user);

    // 根据id获取盐值
    public String findSalt(int userId);

    // 根据账号查询用户信息
    User findByLoginAccount(String loginAccount);

    // 用户入职
    void entry(Integer userId, List<Integer> roles);

    // 头像上传
    void uploadPath(String imageAddress, int userId);

    // 查询用户绑定的指定银行卡信息
    BindAccount queryBindAccount(String userNumber, String accountNumber);

    // 查询用户的具体客户信息和账户信息
    HashMap<String, Object> queryInfo(String userNumber, String accountNumber);

    // 查询钱包余额
    double queryBalance(String userNumber);

    // 查询用户支付限额
    double queryPayLimit(String userNumber);

    // 查询用户所有关联银行卡列表（储蓄卡和活期账户）
    List<AccountDetails> queryAccountList(String userNumber);

    // 查询用户所有关联银行卡列表（信用卡）
    List<AccountCredDetails> queryCredAccountList(String userNumber);

    // 查询用户已绑定卡的列表
    List<BindAccount> queryBindAccountList(String userNumber);

    // 钱包转账
    void transferByWallet(String userNumber, String targetUserNumber, double transferAmount);

    // 查询用户支付密码
    String queryPayPassword(String userNumber);

    // 验证用户支付密码
    boolean checkPayPassword(String userNumber, String payPassword, int userId);

    // 修改用户支付密码
    void updatePayPassword(String userNumber,String password);

    // 修改支付限额
    void updatePayLimit(String userNumber,Double payLimit);

    // 通过钱包支付
    void payByWallet(String userNumber,String targetAccountNumber,double amount);

    // 通过银行账户支付（储蓄卡、活期账户）操作
    void payByAccount(String accountNumber,String targetUserNumber,double amount);

    // 通过银行账户支付（信用卡）操作
    void payByCredAccount(String accountNumber,String targetUserNumber,double amount);

    // 查找指定的用户信用卡
    AccountCredDetails queryAccountCredDetails(String userNumber, String accountNumber);

    // 查询用户账户（储蓄卡、活期账户）可用余额
    double queryAvailableBalance(String userNumber);

    // 查询用户账户（信用卡）账户金额
    double queryAvailableLimit(String userNumber);

    // 用户绑卡
    void bindCard(String userNumber, String accountNumber,String accountType);

    // 用户解绑卡
    void unbindCard(String userNumber, String accountNumber) ;

    // 用户注册
    Integer register(User user) throws SQLException;

    // 充值（往钱包）
    void recharge(String userNumber, String accountNumber, double amount);

    // 提现（往普通银行卡）
    void cashOut(String userNumber, String accountNumber, double amount);

    // 收钱
    void collectMoney(String userNumber, String targetUserNumber, double amount);

    // 前端修改用户的信息
    void updateAllInfo(User user);

    // 用户忘记登录密码，通过手机号重置登录密码
    void forgotPassword(String phone,String loginPassword);

    // 通过手机号查找id
    Integer queryUserIdByPhone(String phone);

    // 查询手机号是否注册
    User findUserByPhone(String phone);

    //二维码存储
    void uploadCodePath(String codePath, int userId);


}
